#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

//链表由一个一个的结点组成，因此定义链表就是定义结点，而一个结点有两个部分组成：存储的数据和指针（指向下一个结点的地址）

//定义链表（结点）的结构
typedef int SLTDataType;
typedef struct SListNode
{
    SLTDataType  data;
    struct SListNode* next;
}SLTNode;

//链表的打印
void SLTPrint(SLTNode* phead);  //phead指向node1


//插入数据
                      //二级指针
void SLPushBack(SLTNode** pphead,SLTDataType x);//尾插
void SLPushFront(SLTNode** pphead,SLTDataType x);//头插
void SLTInsert(SLTNode** pphead, SLTNode pos, SLTDataType x);//在指定位置之前插入数据
void SLTInsertAfter(SLTNode* pos, SLTDataType x);//在指定位置之后插入数据

//删除数据
void SLPopBack(SLTNode** pphead); //尾删
void SLPopFront(SLTNode** pphead); //头删
void SLTErase(SLTNode** pphead, SLTNode* pos);//删除pos结点
void SLTEraseAfter(SLTNode* pos);//删除pos之后的结点

//销毁链表
void SListDestroy(SLTNode** pphead);


SLTNode* SLTFind(SLTNode* phead, SLTDataType x);